<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>    

    /* 
        认识闭包:
            1. 需要一个不会被销毁的函数执行空间
            2. 需要直接或者间接返回一个函数 
            3. 内部函数使用外部函数的私有变量 或者参数   


        概念:
            函数内的函数  

        特点:
            1. 函数外想访问函数内的私有变量    -> 通过闭包 函数 
            2. 延长变量的生命周期          -> 通过闭包  函数

    
    
    
    */
   

    


    function outer(haha){
        let num1 = 100;
        let num2 = 200;

        function inner(){
            return [haha,num1,num2];
        }

        return inner

    }


    // outer()  => inner    没有被调用
    // outer()()  => inner()
    // console.log(outer('kangbazi')());
    // console.log(outer('kangbazi')());


    var res = outer('大个'); // inner   
    // outer 执行完毕了  
    // res 就是outer的闭包函数  


    // 即使 outer 执行完毕  依然可以拿到outer的参数和私有变量 
    var data = res(); // 加上()  相当于 inner执行 

    console.log(data);// ['大个', 100, 200]






    //面试中问你  怎么理解闭包? 
    // 函数内的函数  内部函数可以访问外部函数的变量和参数  即使外部函数执行完毕 
    // 因为 函数执行空间没有被销毁 形成了一个闭包  


    </script>
</body>
</html>